/**
 * 字典类接口
 * TIPS：重复键将被替换
 */
export interface IDictionary<K, V> {
  /**
   *  所有的子元素键名列表。
   */
  keys: Array<K>;
  /**
   *  所有的子元素列表。
   */
  values: Array<V>;
  /**
   * 字典总数
   */
  count: number;
  /**
   * 给指定的键名设置值。
   * TIPS：重复则替换值
   * @param	key 键名。
   * @param	value 值。
   */
  set(key: K, value: V);

  /**
   * 获取指定对象的键名索引。
   * @param	key 键名对象。
   * @return 键名索引。
   */
  indexOf(key: K): number;
  /**
   * 返回指定键名的值。
   * @param	key 键名对象。
   * @return 指定键名的值。
   */
  get(key: K): V;
  /**
   *  获取Key值 通过索引
   */
  getKey(index: number): K;
  /**
   *  获取value值 通过索引
   */
  getValue(index: number): V;
  /**
   * 截取部分数据
   * @param start 起始值
   * @param end 结束值
   */
  takeList(start: number, end: number): IDictionary<K, V>;
  /**
   * 移除指定键名的值。
   * @param	key 键名对象。
   * @return 是否成功移除。
   */
  remove(key: K): boolean;
  /**
   * 清除此对象的键名列表和键值列表。
   */
  clear();
  /**
   * 是否存在数据
   */
  containsKey(key: K): boolean;
}
/**this指向事件处理 */
export interface IEventHandler {
  /**
   * 从对象池内创建一个Handler，默认会执行一次并立即回收，如果不需要自动回收，设置once参数为false。
   * @param caller 执行域(this)。
   * @param method 回调方法。
   * @param args 携带的参数。
   * @param once 是否只执行一次，如果为true，回调后执行recover()进行回收，默认为true。
   * @return 返回创建的handler实例。
   */
  create(
    caller: any,
    method: Function | null,
    args?: any[] | null,
    once?: boolean
  ): IEventHandler;
  /**执行事件 */
  run();
  /**执行参数事件
   * 可以但数据或者数组多参数处理
   */
  runWith(data: any);
}
/**处理事件参数 */
export interface IEventParams {
  /**处理域 */
  caller: any;
  /**处理寒素 */
  method: Function;
}
/**数据转换接口 */
export interface IDataChangeTool {
  /**获取父节点value值 默认为value*/
  getParentValue<T>(e, attrName?): T;
}
